package main

import "fmt"

/*
Go语言中的方法（Method）是一种作用于特定类型变量的函数。
这种特定类型变量叫做接收者（Receiver）。
接收者的概念就类似于其他语言中的this或者 self。
*/

type Person struct {
	name string
	age  int
}

// 构造函数
func NewPerson(name string, age int) *Person {
	return &Person{
		name: name,
		age:  age,
	}
}

// 类方法
func (p Person) Dream() {
	fmt.Printf("%s学好go语言", p.name)
}

// 指针类型的接收者
func (p *Person) SetAge(newAge int) {
	p.age = newAge
}

func main() {
	p1 := NewPerson("wj", 32)
	p1.Dream()
	p1.SetAge(19)
	fmt.Println(p1)
}
